/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.cip.esymons.eventos.bc;

//import java.util.ArrayList;
import java.util.List;
//import java.util.Vector;
import java.util.Vector;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.NoResultException;
import javax.persistence.PersistenceContext;
import org.cip.esymons.eventos.be.InstructorEvento;
import org.cip.esymons.eventos.be.Preevento;
import org.cip.esymons.general.be.PersonaNatural;

/**
 *
 * @author Lizardo Rios
 */
@Stateless
public class InstructorEventoFacade implements InstructorEventoFacadeLocal {

    @PersistenceContext
    private EntityManager em;

    public void create(InstructorEvento instructorEvento) {
        em.persist(instructorEvento);
    }

    public void edit(InstructorEvento instructorEvento) {
        em.merge(instructorEvento);
    }

    public void remove(InstructorEvento instructorEvento) {
        em.remove(em.merge(instructorEvento));
    }

    public InstructorEvento find(Object id) {
        return em.find(InstructorEvento.class, id);
    }

    public List<InstructorEvento> findAll() {
        return em.createQuery("select object(o) from InstructorEvento as o").getResultList();
    }

    public List<InstructorEventoAdapter> listarInstructorEvento(Integer curCodigo) {
        return em.createQuery("SELECT NEW org.cip.esymons.eventos.bc.InstructorEventoAdapter(ie.ineCodigo, i.perapellidoPaterno, i.perapellidoMaterno, i.perNombres) FROM InstructorEvento ie JOIN ie.perCodigo i JOIN ie.preCodigo p WHERE p.preCodigo = ?1")
                .setParameter(1, curCodigo)
                .getResultList();
    }

    public InstructorEventoAdapter buscarPorCodigo(Object id) {
        return em.find(InstructorEventoAdapter.class, id);
    }

    public List<InstructorEvento> listarPorEvento(Preevento preEventoSeleccionado) {
        return em.createQuery("select object(o) from InstructorEvento as o where o.preCodigo=?1").setParameter(1, preEventoSeleccionado).getResultList();
    }

    public PersonaNatural mostrarInstructor(Integer evento) {
        try {
            return (PersonaNatural)em.createQuery("select per from InstructorEvento i join i.preCodigo pre join i.perCodigo per where pre.preActivo = true and i.inePrioridad = true and pre.preCodigo = ?1")
                    .setParameter(1, evento)
                    .getSingleResult();
        } catch (NoResultException ex) {
            System.out.println("ERROR: " + ex.getMessage());
            return null;
        } catch (Exception e) {
            System.out.println("ERROR: " + e.getMessage());
            return null;
        }
    }

    public List<PersonaNatural> listarInstructorXCurso(Integer codigoCurso) {
        return em.createQuery("select per from InstructorEvento ins join ins.preCodigo pre join pre.evento e join ins.perCodigo per where e.eveCodigo = ?1")
                .setParameter(1, codigoCurso)
                .getResultList();
    }

    public List<InstructorEvento> listarPorCurso(Integer curCodigo) {
        return em.createQuery("select i from InstructorEvento i where i.preCodigo.evento.eveCodigo = ?1")
                .setParameter(1, curCodigo)
                .getResultList();
    }

    public InstructorEvento mostrarFirmaInstructor(Integer preCodigo) {
        try {
            return (InstructorEvento) em.createQuery("select ie from InstructorEvento ie where ie.preCodigo.preCodigo = ?1 and ie.inePrioridad = true")
                    .setParameter(1, preCodigo)
                    .getSingleResult();
        } catch (Exception ex) {
            System.out.println("ERROR: " + ex.getMessage());
            return null;
        }
    }

    public Boolean estaRegistrado(Integer insCodigo, Integer preCodigo) {
        Integer retorno = null;
        Vector v = new Vector();
        try {
            v = (Vector) em.createNativeQuery("call sp_existe_instructor (?,?);")
                    .setParameter(1, insCodigo)
                    .setParameter(2, preCodigo)
                    .getSingleResult();
            retorno = (((Long) v.get(0)).intValue());
            retorno = (retorno != null) ? retorno : 0;
            return (retorno != 0) ? true : false;
        } catch (Exception e) {
            System.out.println("FATAL: " + e.getMessage());
            return null;
        }
    }

}
